﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using PortalBusiness.Models;

namespace PortalBusiness.Controllers
{
    [Authorize]
    public class PENDENCIAsController : Controller
    {
        private PortalBusinessContext db = new PortalBusinessContext();

        // GET: PENDENCIAs
        public ActionResult Index()
        {
            return View(db.PENDENCIAs.Where(p => p.LOGIN == User.Identity.Name ||  p.COMPARTILHAMENTO.ToLower().Contains(User.Identity.Name.ToLower()) ).OrderBy(p => p.STATUS).ThenBy(p => p.PENDENCIAID*(-1)).ToList());
        }

        // GET: PENDENCIAs/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            PENDENCIA pENDENCIA = db.PENDENCIAs.Find(id);
            if (pENDENCIA == null)
            {
                return HttpNotFound();
            }
            return View(pENDENCIA);
        }

        // GET: PENDENCIAs/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: PENDENCIAs/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "PENDENCIAID,CODIGO_NEGOCIO,CODIGO_LOJA,DATA_PROCESSAMENTO,HORA_PROCESSAMENTO,LOGIN,COMPARTILHAMENTO,DESCRICAO,STATUS")] PENDENCIA pENDENCIA)
        {
            if (ModelState.IsValid)
            {
                USUARIO usuario = db.USUARIOs.Where(u => u.LOGIN == User.Identity.Name).FirstOrDefault();
                pENDENCIA.CODIGO_LOJA = usuario.CODIGO_LOJA;
                pENDENCIA.CODIGO_NEGOCIO = usuario.CODIGO_NEGOCIO;
                pENDENCIA.DATA_PROCESSAMENTO = DateTime.Today;
                pENDENCIA.HORA_PROCESSAMENTO = DateTime.Now.ToString("HH:mm:ss");
                pENDENCIA.LOGIN = usuario.LOGIN;
                db.PENDENCIAs.Add(pENDENCIA);
                db.SaveChanges();
                if (pENDENCIA.COMPARTILHAMENTO != "" && pENDENCIA.COMPARTILHAMENTO != null)
                {
                    List<String> emails = pENDENCIA.COMPARTILHAMENTO.Split(new Char[] {';'}).ToList();
                    foreach (string item in emails)
                    {
                        if (item.Trim() != "")
                        Emails.Emails.AcompanhamentoPendencia(usuario.NOME_COMPLETO, item, pENDENCIA.DESCRICAO);
                    }

                }
                return RedirectToAction("Index");
            }

            return View(pENDENCIA);
        }

        // GET: PENDENCIAs/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            PENDENCIA pENDENCIA = db.PENDENCIAs.Find(id);
            if (pENDENCIA == null || pENDENCIA.LOGIN != User.Identity.Name)
            {
                return HttpNotFound();
            }
            return View(pENDENCIA);
        }

        // POST: PENDENCIAs/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "PENDENCIAID,CODIGO_NEGOCIO,CODIGO_LOJA,DATA_PROCESSAMENTO,HORA_PROCESSAMENTO,LOGIN,COMPARTILHAMENTO,DESCRICAO,STATUS")] PENDENCIA pENDENCIA)
        {
            if (ModelState.IsValid)
            {
                USUARIO usuario = db.USUARIOs.Where(u => u.LOGIN == User.Identity.Name).FirstOrDefault();
                pENDENCIA.CODIGO_LOJA = usuario.CODIGO_LOJA;
                pENDENCIA.CODIGO_NEGOCIO = usuario.CODIGO_NEGOCIO;
                pENDENCIA.DATA_PROCESSAMENTO = DateTime.Today;
                pENDENCIA.HORA_PROCESSAMENTO = DateTime.Now.ToString("HH:mm:ss");
                pENDENCIA.LOGIN = usuario.LOGIN;
                db.Entry(pENDENCIA).State = EntityState.Modified;
                db.SaveChanges();
                if (pENDENCIA.COMPARTILHAMENTO != "" && pENDENCIA.COMPARTILHAMENTO != null)
                    Emails.Emails.AcompanhamentoPendencia(usuario.NOME_COMPLETO, pENDENCIA.COMPARTILHAMENTO, pENDENCIA.DESCRICAO);
                return RedirectToAction("Index");
            }
            return View(pENDENCIA);
        }

        // GET: PENDENCIAs/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            PENDENCIA pENDENCIA = db.PENDENCIAs.Find(id);
            if (pENDENCIA == null || pENDENCIA.LOGIN != User.Identity.Name)
            {
                return HttpNotFound();
            }
            return View(pENDENCIA);
        }

        // POST: PENDENCIAs/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            PENDENCIA pENDENCIA = db.PENDENCIAs.Find(id);
            db.PENDENCIAs.Remove(pENDENCIA);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
